[스프링부트] [JAVA] [입문] 2.2 MVC와 템플릿 엔진

업데이트:




Spring으로 웹을 개발한다는 건 크게 3가지 정도로 나눌 수 있다.

첫번째로 정적 컨텐츠
두번째로 MVC와 템플릿엔진
세번째로 API

오늘은 MVC에 대해 간단하게 알아보고 공부해보도록 하겠다!


Model 이란?

  • Model은 HashMap 형태를 갖고 있으며 <key,value> 값을 가지고 있습니다.
  • addAttribute()와 같은 기능을 통해 모델에 원하는 key,value 값을 주어 View에 데이터를 전달할 수 있습니다.
  • Controller의 메서드에 Model이라는 타입을 파라미터로 지정할 수 있습니다.







View란?

  • View는 그냥 사용자가 보는 화면이라고 생각하면 편하다
  • Model에 필요한 데이터를 담아서 Controller에 전달하면 Spring에서는 viewResolver를 통해 템플릿 엔진 처리를 한 뒤 html로 변환하여 웹 브라우저에 보여준다.







Controller란?

  • 컨트롤러는 사용자의 요청이 진입하는 지점이라고 볼 수 있다.
  • 요청에 따라 어떤 처리를 할지 결정해주는데, 컨트롤러는 결정만 해주고 실직적인 처리는 서비스(Layered Architecture)에서 담당한다.
  • 사용자에게 View를 응답으로 보내준다!







MVC를 이용한 실제 동작과정

[ HelloController ]

@GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name",name); // "name"은 key, name은 파라미터의 String name
        return "hello-template";
    }
  • 컨트롤러에서 @GetMapping을 통해 url설정을 해주고, 메소드에 @RequestParam(“name”) 을 통해 name이라는 파라미터를 받도록 설정하고 String name과 Model 변수를 선언했습니다.
  • 그리고 model의 key값을 name으로 받고, String name을 넣어줬습니다.
  • return은 hello-template.html로 설정했습니다.




[ hello-template.html ]

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body></html>
  • hello-template에서는 기본적으로 서버에서 어떤 작동없이, 즉 RequestParam(“name”)을 넘겨받지 못한다면 hello! empty 를 출력합니다.
  • name에 값이 들어온다면 hello [name] 이 출력됩니다.




[ name에 값을 받지 않은 경우]




그런데 helloMVC 메소드는 RequestParam(“name”)을 파라미터로 갖고 있기 때문에 name을 받지 못한 경우 오류가 발생합니다.

  • 분명 localhost:8080/hello-mvc 를 제대로 입력했는데 오류가 납니다.
  • 해결방법은 생각보다 간단합니다.




@RequestParam

[ name = Spring HAHA 로 설정 ]

  • localhost:8080/hello-string 뒤에 ?name=[name의 value] 을 입력해주면 끝입니다!
  • 위 그림에서는 ?name=Spring HAHA 를 입력했기 때문에 helloSpring HAHA 라는 문자가 출력되었습니다.




[ name = spring!!!!! 로 설정 ]

  • 이 그림에서는 ?name=spring!!!!! 을 입력했기 때문에 hello spring!!!!! 라는 문자가 출력되었습니다.
  • 위 두 그림 모두에서 name에 값을 넣어줬더니 화면에 name이 그대로 출력된것을 볼 수 있습니다.
<p th:text="'hello ' + ${name}">hello! empty</p>
  • hello-template.html 에서 넣어준 위 코드 때문에 화면에는 hello + [name] 이 출력된다고 볼 수 있습니다.







MVC 동작 환경

  • 웹브라우저에서 localhost:8080/hello-mvc 를 넘겨준다.
  • 내장 톰켓 서버에서 넘겨받은 주소를 스프링에 던져준다.
  • hello-mvc 가 매핑되어 있는 helloController에서 이를 받고 hello-template.html 을 return해준다.
  • 이때 @RequestParam 으로 받은 name을 모델에 같이 전달해준다. ( 여기서는 name = spring 으로 설정 )
  • 이를 받은 viewResolver가 view를 찾아주고 템플릿엔진을 연결해준다.
  • 이를 웹브라우저에 다시 보내서 화면에 띄워준다!







여기까지 [스프링부트] [JAVA] [입문] 3. MVC와 템플릿 엔진 포스팅을 마치겠습니다.

댓글남기기